home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / howtor_1 / shutdown.cls < prev    next >
Text File  |  1999-08-20  |  3KB  |  105 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "ShutdownRestart"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. '-----CONSTANT DECLARATION-----
  17. Public Const EWX_LogOff As Long = 0
  18. Public Const EWX_SHUTDOWN As Long = 1
  19. Public Const EWX_REBOOT As Long = 2
  20. Public Const EWX_FORCE As Long = 4
  21. Public Const EWX_POWEROFF As Long = 8
  22. Public Const mlngWindows95 = 0
  23. Public Const mlngWindowsNT = 1
  24.  
  25. '-----FUNCTION DECLARATION-----
  26. Public Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
  27. Public Declare Function GetVersion Lib "kernel32" () As Long
  28.  
  29. Private Declare Function GetLastError Lib "kernel32" () As Long
  30. Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
  31. Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
  32. Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
  33. Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
  34.  
  35. '-----TYPE DECLARATIONS-----
  36. Private Type LUID
  37.     UsedPart As Long
  38.     IgnoredForNowHigh32BitPart As Long
  39. End Type
  40.  
  41. Private Type LUID_AND_ATTRIBUTES
  42.     TheLuid As LUID
  43.     Attributes As Long
  44. End Type
  45.  
  46. Private Type TOKEN_PRIVILEGES
  47.     PrivilegeCount As Long
  48.     TheLuid As LUID
  49.     Attributes As Long
  50. End Type
  51.  
  52. '-----MISC. DECLARATIONS-----
  53. Public glngWhichWindows32 As Long
  54. Private Declare Sub SetLastError Lib "kernel32" (ByVal dwErrCode As Long)
  55.          
  56.  
  57. Public Sub AdjustToken()
  58.  
  59.     Const TOKEN_ADJUST_PRIVILEGES = &H20
  60.     Const TOKEN_QUERY = &H8
  61.     Const SE_PRIVILEGE_ENABLED = &H2
  62.  
  63.     Dim hdlProcessHandle As Long
  64.     Dim hdlTokenHandle As Long
  65.     Dim tmpLuid As LUID
  66.     Dim tkp As TOKEN_PRIVILEGES
  67.     Dim tkpNewButIgnored As TOKEN_PRIVILEGES
  68.     Dim lBufferNeeded As Long
  69.  
  70.     SetLastError 0
  71.  
  72.     hdlProcessHandle = GetCurrentProcess()
  73.  
  74.     If GetLastError <> 0 Then
  75.         MsgBox "GetCurrentProcess error==" & GetLastError
  76.     End If
  77.  
  78.     OpenProcessToken hdlProcessHandle, _
  79.         (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle
  80.  
  81.     If GetLastError <> 0 Then
  82.         MsgBox "OpenProcessToken error==" & GetLastError
  83.     End If
  84.  
  85.     LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
  86.  
  87.     If GetLastError <> 0 Then
  88.         MsgBox "LookupPrivilegeValue error==" & GetLastError
  89.     End If
  90.  
  91.     tkp.PrivilegeCount = 1
  92.     tkp.TheLuid = tmpLuid
  93.     tkp.Attributes = SE_PRIVILEGE_ENABLED
  94.  
  95.     AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
  96.                                
  97.     If GetLastError <> 0 Then
  98.         MsgBox "AdjustTokenPrivileges error==" & GetLastError
  99.     End If
  100.  
  101. End Sub
  102.  
  103.  
  104.  
  105.